package com.partsoft.dits.exts;

import java.io.IOException;
import java.util.Set;

/**
 * 扩展库管理器<br>
 * 可以通过使用该接口完成自定义库加载与卸载动作。
 */
public interface ExtendsLibraryManager {
	
	/**
	 * 判断是否已经存在相同的扩展文件包
	 * @param jarName 扩展文件名(不包含扩展名)
	 * @return
	 */
	boolean hasExtendsPackage(String jarName);
	
	/**
	 * 根据名称移除存在的扩展文件包
	 * @param jarName 扩展包名臣
	 * @return 如果返回false则表示未能成功删除。
	 */
	boolean removeExtendsPackage(String jarName);
	
	/**
	 * 获得扩展包属性信息
	 * @return 集合
	 */
	Set<ExtendsLibraryInfomation> getExtendsLibraryInformations();
	
	/**
	 * 添加一个Jar扩展文件包。
	 * @param packageName
	 * @param fileBytes 文件内容（用于保存）
	 * @throws 如果传入的字节流不是有效的ZIP或者JAR格式则会抛出{@link IOException}
	 */
	void saveExtendsPackage(String packageName, byte[] fileBytes) throws IOException;
	
	 /**
	  * 获得能够访问扩展包资源的{@link ClassLoader}实例
	  * @return {@link ClassLoader}实例
	  */
	 ClassLoader getExtendsClassLoader();
	 
	 /**
	  * 获得核心依赖包名
	  */
	 String []getJarNamesOfDepends();

}
